python数据类型(二)

python的字节类型

字符串

  • 由0个或多个字符组成的有序字符序列

  • 单行字符串由一对单引号一对双引号表示,如:”abc” 或 ‘abc’

  • 多行字符串由三个单引号三个双引号表示,如:’’’ Python
    语言 ‘’’

  • 字符串是字符的有序序列,可以用序号访问

  • 索引:s[N] 通过序号获取单个字符。如:”abc”[1]=”b” ; “abc”[-1]=”c”

  • 切片:s[N:M:K] 获取M(含,缺省为0)到N(不含,缺省为len)的步径为K(缺省为1,-1时为倒序)的子串。

  • 字符串支持转义字符

功能 使用
转义符表达特定字符的本意 “这里有个双引号(\”)” 结果为 这里有个双引号(“)
转义符形成一些组合,表达一些不可打印的含义 “\b”回退 “\n”换行(光标移动到下行首) “\r” 回车(光标移动到本行首)
  • 字符串前导符r表示raw string,不支持转义,常用于正则表达式。

  • 字符串的编码方式
    统一字符编码,即覆盖几乎所有字符的编码方式
    从0到1114111 (0x10FFFF),每个编码对应一个字符
    Python字符串中每个字符都是Unicode编码字符

    1
    2
    3
    4
    "1 + 1 = 2" + chr(10004)
    '1 + 1 = 2✔'
    ord('♉')
    9801
  • 字符串操作符

操作符及使用 描述
x + y 连接两个字符串x和y
n x 或 x n 复制n次字符串x
x in s 如果x是s的子串,返回True,否则返回False
  • 字符串操作函数
函数及使用 描述
len(x) 长度,返回字符串x的长度
str(x) 任意类型x所对应的字符串形式
hex(x) 或 oct(x) 整数x的十六进制或八进制小写形式字符串
chr(u) x为Unicode编码,返回其对应的字符 (源于:character)
ord(x) x为字符,返回其对应的Unicode编码 (源于:ordinal)
  • 字符串操作方法
方法及使用 描述
str.lower() 或 str.upper() 返回字符串的副本,全部字符小写/大写
“AbCdEfGh”.lower() 结果为 “abcdefgh”
str.split(sep=None) 返回一个列表,由str根据sep被分隔的部分组成
“A,B,C”.split(“,”) 结果为 [‘A’,’B’,’C’]
str.count(sub) 返回子串sub在str中出现的次数
“an apple a day”.count(“a”) 结果为 4
str.replace(old, new) 返回字符串str副本,所有old子串被替换为new
“python”.replace(“n”,”n123.io”) 结果为 “python123.io”
str.center(width[,fillchar]) 字符串str根据宽度width居中,fillchar可选
“python”.center(20,”=”) 结果为 ‘=======python=======’
str.strip(chars) 从str中去掉在其左侧和右侧chars中列出的字符
“= python= “.strip(“ =np”) 结果为”ytho”
str.join(iter) 在iter变量除最后元素外每个元素后增加一个str
“,”.join(“12345”) 结果为 “1,2,3,4,5” #主要用于字符串分隔等
  • 字符串格式化

    • %方法:

      1
      2
      3
      4
      >>> 'Hello, %s' % 'world'
      'Hello, world'
      >>> 'Hi, %s, you have $%d.' % ('Michael', 1000000)
      'Hi, Michael, you have $1000000.'

      如果只有一个%?,括号可以省略。

      常见的占位符有:

占位符 替换内容
%d 整数
%f 浮点数
%s 字符串
%x 十六进制整数
其中,格式化整数和浮点数还可以指定是否补0和整数与小数的位数
用`%%`来表示一个`%`  
  • str.format()(python2.6增加)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    #通过位置
    '你好,我是{0}, 很高兴为您服务。您的资料显示您今年{1}岁'.format('小娜',18)
    '你好,我是{}, 很高兴为您服务。您的资料显示您今年{}岁'.format('小娜',18)
    '你好,我是{1}, 很高兴为您服务。您的资料显示您今年{0}岁。{1}与你同岁'.format(18, '小娜')

    #通过关键字参数
    '你好,我是{name}, 很高兴为您服务。您的资料显示您今年{age}岁'.format(name='小娜',age=18)
    class Person(object):
    def __init__(self,name,age):
    self.name = name
    self.age = age

    def __str__(self):
    return 'This guy is {self.name},is {self.age} old'.format(self=self)

    #通过对象属性
    class AssignValue(object):
    def __init__(self, value):
    self.value = value
    my_value = AssignValue(6)
    print('value 为: {0.value}'.format(my_value)) # "0" 是可选的

    #通过映射 list
    xNa = ['小娜', 18]
    '你好,我是{0[0]}, 很高兴为您服务。您的资料显示您今年{0[1]}岁'.format(xNa)

    #通过映射 dict
    xNa = {'name':'小娜', 'age':18}
    '你好,我是{name}, 很高兴为您服务。您的资料显示您今年{age}岁'.format(**xNa)

    # 可以使用大括号 **{}** 来转义大括号
    "{} 对应的位置是 {{0}}".format("runoob")

    槽内部的格式化配置:{ <参数标识> <格式控制标记>}

    格式控制标记

填充 对齐 宽度 , . 类型
引导符号 用于填充的单个字符 <左对齐 >右对齐 ^居中对齐 槽设定的输出宽度 数字的千位分隔符 浮点数小数精度或字符串最大输出长度 整数类型b,o,d,x,X 浮点数类型e,E,f 字符类型c,s
  • f-string/F字符串(python3.6增加)

    ==当中文字符宽度不够时,采用西文字符填充;中西文字符占用宽度不同。==

    中文的空格chr(12288)

字节串

  • 由0个或多个字节组成的有序序列,每字节对应值为0-255
  • 字节串由前导符b或B与一对单引号/双引号或三个单引号/三个双引号表示,如:b”a\xf6” ,b’’’abcdef
    1234567890 ‘’’
  • 0-255间非可打印字符用\xNN方式表示,N是一个十六进制字符
  • 索引功能,与字符串相同
  • 切片功能,与字符串相同
  • 字节串操作符,与字符串相同
  • 字节串处理函数,支持len()
  • 字节串处理方法,与字符串类似,参数必须也是字节串。
  • 如果要在网络上传输,或者保存到磁盘上,就需要把str变为以字节为单位的bytes

  • bytes的每个字符都只占用一个字节。

  • Unicode表示的str通过encode()方法可以编码为指定的bytes

    1
    2
    'ABC'.encode('ascii') == b'ABC'
    '中文'.encode('utf-8') == b'\xe4\xb8\xad\xe6\x96\x87'
  • 纯英文的str可以用ASCII编码为bytes,内容是一样的

  • 含有中文的str可以用UTF-8编码为bytes。含有中文的str无法用ASCII编码,因为中文编码的范围超过了ASCII编码的范围,Python会报错。

  • bytes中,无法显示为ASCII字符的字节,用\x##显示。

  • 从网络或磁盘上读取了字节流,读到的数据是bytesbytes变为str,需要用decode()

    1
    2
    b'ABC'.decode('ascii') =='ABC'
    b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8') == '中文'
  • 如果bytes中只有一小部分无效的字节,可以传入errors='ignore'忽略错误的字节:

    1
    b'\xe4\xb8\xad\xff'.decode('utf-8', errors='ignore') == '中'